# -*- coding: utf-8 -*-

import allure
from common.page import Page
from common.utils import Utils
from config.config import Config
from dz_service.page_elements.el_id_card import id_card
from dz_service.function.fun_home import Home
from dz_service.function.fun_common import Common
from time import sleep
from dz_service.function.fun_service_utils import ServiceUtils


class UpdateIdCard:

    @allure.step('step:作废网厅新中台、BOP业务流水')
    def initial_userinfo(self, client_id):
        ''''
        作废网厅新中台、BOP业务流水
        @param client_id 客户号
        '''
        ServiceUtils().initial_service_sql(client_id, '0003')
        ServiceUtils().initial_bop_sql(client_id, '1001')

    @allure.step('step:业务办理前置检查')
    def pre_check_idcard(self, test_input):
        '''
        @param test_input：测试数据
        业务办理前置检查,包含以下三个模块：
        1.落地引导页
        2.业务准入条件页
        '''
        header_info = test_input['header_info']
        introduce_info = test_input['introduce_info']
        access_conditions = test_input['access_conditions']
        # 点击首页菜单--身份证更新
        Home().click_update_id_card()
        # 落地引导页检查
        Common().check_guide_page(header_info, introduce_info)
        # 准入条件检查页
        Common().check_access_conditions(access_conditions)

    @allure.step('step:证件类型选择')
    def choose_id_card_type(self, test_input):
        '''
        证件类型选择
        @param test_input：测试数据
        '''
        id_card_type = test_input['id_card_type']
        assert Page.element(id_card, "身份证", "二代身份证").text == "二代身份证", "页面文字：二代身份证 检验失败。"
        assert Page.element(id_card, "身份证", "临时身份证").text == "临时身份证", "页面文字：临时身份证 检验失败。"
        # 选择，上传身份信息
        Page.logger.info('选择持有的证件类型', extra={"appname": "choose_id_card_type"})
        Page.click(id_card, '身份证', id_card_type)

    @allure.step('step:更新身份证信息')
    def update_id_card(self, positive_pic, back_pic, head_pic, address):
        '''
        更新身份证信息
        @param positive_pic 身份证正面
        @param back_pic 身份证背面
        @param head_pic 头像面
        @param address 地址
        '''
        positive_pic_path = Utils.get_test_pic(positive_pic)
        back_pic_path = Utils.get_test_pic(back_pic)
        head_pic_path = Utils.get_test_pic(head_pic)
        # 上传身份信息
        Page.logger.info('开始上传二代身份证照片', extra={"appname": "update_id_card"})
        Common().upload_id_card_pic(positive_pic_path, back_pic_path, head_pic_path)
        # 修改身份信息
        Common().update_recognize_result(address)
        # 若弹出一人多户同步弹窗提示，则点击确定
        Common().check_dialog()

    @allure.step('step:提交结果页检查')
    def check_result_page(self, test_input):
        '''
        提交结果页检查
        @param test_input：测试数据
        '''
        success_info = test_input['success_info']
        # 检查是否提示提交成功
        Common().check_result_page(success_info)

    @allure.step('step:检查大字段表中身份证更新数据')
    def check_update_id_card(self, client_id, result):
        '''
        提交结果页检查
        @param result：期待结果
        @param client_id 客户号
        '''
        if Config().env == 'test':
            search_result = Utils.search_client(client_id)
            Page.logger.info(search_result, extra={'appname': 'check_update_id_card'})
            Utils.check_val(result["idAddress"], search_result["idAddress"], "证件地址")
            Utils.check_val(result["issuedDepart"], search_result["issuedDepart"], "发行机关")
            Utils.check_val(result["idBegindate"], search_result["idBegindate"], "开始日期")
            Utils.check_val(result["idEnddate"], search_result["idEnddate"], "结束日期")
        else:
            assert True
